<%@page language="java" import="java.sql.*" %>
<%
Integer userId=(Integer)request.getSession(false).getAttribute("id");
dbBean.DBConnectionManager connMgr=(dbBean.DBConnectionManager)application.getAttribute("connMgr");
if((userId==null) || (connMgr==null)) {
  application.log("- No existe una sesion de usuario o no se ha podido obtener una conexion con la BBDD");
%>
<html>
  <body onLoad="parent.location.href='/';">
  </body>
</html>
<%
} else {
String desde=(String)request.getParameter("desde");
String hasta=(String)request.getParameter("hasta");

if(desde==null)
        desde="";
if(hasta==null)
        hasta="";
Timestamp desdeTs=new Timestamp(0);
Timestamp hastaTs=new Timestamp(new java.util.Date().getTime());

if(desde!="") {
  try {
    desdeTs=Timestamp.valueOf(desde+":00.0");
  } catch(IllegalArgumentException e) {e.printStackTrace();}
}
if(hasta!="") {
  try {
    hastaTs=Timestamp.valueOf(hasta+":00.0");
  } catch(IllegalArgumentException e) {e.printStackTrace();}
}

Connection con=null;
StringBuffer datos=new StringBuffer();
 try {
  Timestamp timestamp=null;
  application.log("- Se va a consultar la ruta en la BBDD");
  con = connMgr.getConnection("mysql");
  PreparedStatement pstmt=null;
  if((desde=="") && (hasta=="")) {
      pstmt = con.prepareStatement("SELECT timestamp, latitud, longitud, velocidad, rumbo, altitud FROM datos WHERE UserId="+userId.toString()+";");
  } else {
      pstmt = con.prepareStatement("SELECT timestamp, latitud, longitud, velocidad, rumbo, altitud FROM datos WHERE UserId="+userId.toString()+" AND timestamp BETWEEN ? AND ?;");
      pstmt.setTimestamp(1, desdeTs);
      pstmt.setTimestamp(2, hastaTs);
  }
  ResultSet rs=pstmt.executeQuery();
  while(rs.next()) {
      datos.append("#");
      timestamp=rs.getTimestamp(1);
      datos.append(timestamp.toString());
      datos.append(";");
      datos.append(rs.getString(2));
      datos.append(";");
      datos.append(rs.getString(3));
      datos.append(";");
      datos.append(rs.getString(4));
      datos.append(";");
      datos.append(rs.getString(5));
      datos.append(";");
      datos.append(rs.getString(6));
  }
  rs.close();
  pstmt.close();
  application.log("- Se ha obtenido la ruta correctamente:"+datos.toString());

} catch (SQLException e) {
  application.log("GoogleGPS_offline_descargar.jsp",e);
}
if(con!=null)
  connMgr.freeConnection("mysql",con);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">

<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>

<title>Localizador GPS</title>
<style type="text/css">
    v\:* {
      behavior:url(#default#VML);
    }
</style>

<style type="text/css">
    .on {color:red}
    .off {color:black}
</style>

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=" type="text/javascript" charset="utf-8"></script>

<script language="javascript"  type="text/javascript">
//<![CDATA[

var http_request = false;

var map;
var gMarker;
var points = [];
var ruta;
var datos="<%=datos.toString()%>";

function load() {
    if (GBrowserIsCompatible()) {

	map = new GMap2(document.getElementById("map"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(0, 0), 13);
	map.setMapType(G_HYBRID_MAP);

	ruta=datos.split("#");
	dibuja();
    }
}


function dibuja() {

    try {
      var point;
      var latitud, longitud, latitudNMEA, longitudNMEA;
      var grados;
      var latitudAnterior, longitudAnterior;
      var dx, dy;
      var distancia=0;

      results=ruta[1].split(";");
      latitudNMEA=results[1];
      longitudNMEA=results[2];
      grados=Math.floor(latitudNMEA/1000000);
      if(grados<0)
        grados=grados+1;
      latitudAnterior=(latitudNMEA/1000000-grados)/0.6+grados;
      grados=Math.floor(longitudNMEA/1000000);
      if(grados<0)
        grados=grados+1;
      longitudAnterior=(longitudNMEA/1000000-grados)/0.6+grados;

      for(i=1; i<ruta.length; i++) {
        results=ruta[i].split(";");

        latitudNMEA=results[1];
        longitudNMEA=results[2];


        grados=Math.floor(latitudNMEA/1000000);
        if(grados<0)
	  grados=grados+1;
        latitud=(latitudNMEA/1000000-grados)/0.6+grados;
        grados=Math.floor(longitudNMEA/1000000);
        if(grados<0)
	  grados=grados+1;
        longitud=(longitudNMEA/1000000-grados)/0.6+grados;

        dx=6370*(latitud-latitudAnterior)*Math.PI/180;
        dy=6370*Math.cos(latitud*Math.PI/180)*(longitud-longitudAnterior)*Math.PI/180;
        distancia+=Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));
        latitudAnterior=latitud;
        longitudAnterior=longitud;


        point = new GLatLng(latitud, longitud);
        points.push(point);
      }

      document.getElementById("label").innerHTML="Distancia total: <b>"+Math.round(distancia*1000)/1000+" km</b>";

      gMarker=new GMarker(point, null);
      map.addOverlay(gMarker);

      map.panTo(new GLatLng(latitud, longitud));

      var gPolyline=new GPolyline(points);
      map.addOverlay(gPolyline);

    } catch (err) {alert(err.description);}

}

//]]>
</script>

</head>

<body onload="load()" onunload="GUnload()">
  <h2>Localizador GPS</h2>
  <hr>
  <div id="map" style="width: 500px; height: 300px"></div>

  <div id="links">
    <label id="label"> </label>
  </div>

</body>

</html>

<%
}
%>

